#ifndef READER_INC
#define READER_INC

#include <string>
#include <fstream>
#include <cassert>

#include "Defines.h"

/* Tamanho do bloco de caracteres lido por iteração */
#define BLOCK_SIZE 4096

using namespace std;

/*
 * =====================================================================================
 *        Class:  Reader
 *  Description:  Classe que lê do arquivo
 * =====================================================================================
 */
class Reader
{

public:

    /*-----------------------------------------------------------------------------
     *  Constrói um leitor de arquivo passando o nome, o offset e o tamanho do bloco
     *  que será lido
     *-----------------------------------------------------------------------------*/
    Reader(char *filename, ulong offset, ulong blockSize = BLOCK_SIZE);

    virtual ~Reader();

    /*-----------------------------------------------------------------------------
     *  Lê um bloco do arquivo
     *-----------------------------------------------------------------------------*/
    string *readBlock();

    /*-----------------------------------------------------------------------------
     *  Verifica se o arquivo existe
     *-----------------------------------------------------------------------------*/
    static bool fileExists(char *filename);

    /*-----------------------------------------------------------------------------
     *  Retorna o tamanho do arquivo
     *-----------------------------------------------------------------------------*/
    static ulong getLength(char *filename);

private:

    /*-----------------------------------------------------------------------------
     *  Stream de entrada
     *-----------------------------------------------------------------------------*/
    ifstream instream;

    /*-----------------------------------------------------------------------------
     *  Tamanho do bloco
     *-----------------------------------------------------------------------------*/
    ulong blockSize;

};

#endif /* ----- #ifndef READER_INC  ----- */

